package com.agrimall.service;

import com.agrimall.entity.Product;
import java.util.List;

/**
 * 商品服务接口
 */
public interface ProductService {
    /**
     * 根据ID查询商品
     */
    Product getProductById(Long productId);
    
    /**
     * 添加商品
     */
    boolean addProduct(Product product);
    
    /**
     * 更新商品
     */
    boolean updateProduct(Product product);
    
    /**
     * 删除商品
     */
    boolean deleteProduct(Long productId);
    
    /**
     * 查询商品列表（分页）
     */
    List<Product> getProductList(int page, int pageSize);
    
    /**
     * 根据商户ID查询商品列表
     */
    List<Product> getProductListByMerchant(Long merchantId, int page, int pageSize);
    
    /**
     * 根据分类查询商品
     */
    List<Product> getProductListByCategory(String category, int page, int pageSize);
    
    /**
     * 搜索商品
     */
    List<Product> searchProducts(String keyword, int page, int pageSize);
    
    /**
     * 统计商品总数
     */
    int countAllProducts();
    
    /**
     * 根据分类统计商品数量
     */
    int countProductsByCategory(String category);
    
    /**
     * 根据关键字统计商品数量
     */
    int countProductsByKeyword(String keyword);
    
    /**
     * 根据商户ID统计商品数量
     */
    int countProductsByMerchant(Long merchantId);
    
    /**
     * 根据商户ID查询商品列表（排除逻辑删除的）
     */
    List<Product> getProductListByMerchantExcludeDeleted(Long merchantId, int page, int pageSize);
    
    /**
     * 根据商户ID统计商品数量（排除逻辑删除的）
     */
    int countProductsByMerchantExcludeDeleted(Long merchantId);
    
    /**
     * 根据商户ID和商品名称查询商品（排除逻辑删除的）
     */
    List<Product> searchProductsByMerchantAndName(Long merchantId, String keyword, int page, int pageSize);
    
    /**
     * 根据商户ID和商品名称统计商品数量（排除逻辑删除的）
     */
    int countProductsByMerchantAndName(Long merchantId, String keyword);
    
    /**
     * 根据商户ID和分类查询商品（排除逻辑删除的）
     */
    List<Product> getProductListByMerchantAndCategory(Long merchantId, String category, int page, int pageSize);
    
    /**
     * 根据商户ID和分类统计商品数量（排除逻辑删除的）
     */
    int countProductsByMerchantAndCategory(Long merchantId, String category);
    
    /**
     * 根据商户ID、商品名称和分类查询商品（排除逻辑删除的）
     */
    List<Product> searchProductsByMerchantNameAndCategory(Long merchantId, String keyword, String category, int page, int pageSize);
    
    /**
     * 根据商户ID、商品名称和分类统计商品数量（排除逻辑删除的）
     */
    int countProductsByMerchantNameAndCategory(Long merchantId, String keyword, String category);
    
    /**
     * 查询所有商品（管理员，包含逻辑删除的）
     */
    List<Product> getProductListForAdmin(int page, int pageSize);
    
    /**
     * 统计所有商品数量（管理员，包含逻辑删除的）
     */
    int countAllProductsForAdmin();
    
    /**
     * 管理员多条件查询商品
     */
    List<Product> searchProductsForAdmin(String keyword, String category, String merchantUsername, int page, int pageSize);
    
    /**
     * 管理员多条件统计商品数量
     */
    int countProductsForAdminByConditions(String keyword, String category, String merchantUsername);
    
    /**
     * 逻辑删除商品
     */
    boolean logicalDeleteProduct(Long productId);
    
    /**
     * 恢复删除的商品
     */
    boolean restoreProduct(Long productId);
}




